package dao_sys

import (
	"wrblog-api-go/app/model/model_sys"
	"wrblog-api-go/pkg/errs"
	"wrblog-api-go/pkg/mysql"
	"wrblog-api-go/pkg/utils"
)

func GetList(sysFile model_sys.SelectSysFile) (sysFiles []model_sys.SysFilePo, total int64, err error) {
	db := mysql.Db("salve-0").Model(&model_sys.SysFilePo{})
	if sysFile.FileType != "" {
		db = db.Where("file_type like ?", "%"+sysFile.FileType+"%")
	}
	if sysFile.OldName != "" {
		db = db.Where("old_name like ?", "%"+sysFile.OldName+"%")
	}
	if sysFile.NewName != "" {
		db = db.Where("new_name like ?", "%"+sysFile.NewName+"%")
	}
	if sysFile.CreateBy != "" {
		db = db.Where("create_by like ?", "%"+sysFile.CreateBy+"%")
	}
	if sysFile.UserId != 0 {
		db = db.Where("user_id = ?", sysFile.UserId)
	}
	if !sysFile.StartTime.IsZero() {
		db = db.Where("create_time >= ?", sysFile.StartTime)
	}
	if !sysFile.EndTime.IsZero() {
		db = db.Where("create_time <= ?", sysFile.EndTime)
	}
	db = db.Count(&total).Order("create_time desc")
	if sysFile.PageNum != nil && sysFile.PageSize != nil {
		db = db.Limit(*sysFile.PageSize).Offset((*sysFile.PageNum - 1) * *sysFile.PageSize)
	} else {
		db = db.Limit(10)
	}
	err = errs.ErrNotFound(db.Find(&sysFiles).Error)
	return
}

func AddFile(sysFile model_sys.SysFilePo) (model_sys.SysFilePo, error) {
	db := mysql.Db("salve-0").Model(&model_sys.SysFilePo{})
	sysFile.FileId = utils.GetUUIDString()
	sysFile.CreateTime = utils.NewTimeNow()
	err := db.Create(&sysFile).Error
	return sysFile, errs.ErrNotFound(err)
}

func GetFileById(fileId string) (sysFile model_sys.SysFilePo, err error) {
	db := mysql.Db("salve-0").Model(&model_sys.SysFilePo{})
	err = db.Where("file_id = ?", fileId).First(&sysFile).Error
	err = errs.ErrNotFound(err)
	return
}

func GetFileByIds(fileIds []string) (sysFiles []model_sys.SysFilePo, err error) {
	db := mysql.Db("salve-0").Model(&model_sys.SysFilePo{})
	err = db.Where("file_id in ?", fileIds).First(&sysFiles).Error
	err = errs.ErrNotFound(err)
	return
}

func EditFile(sysFile model_sys.SysFilePo) (int64, error) {
	db := mysql.Db("salve-0")
	res := db.Updates(&sysFile)
	return res.RowsAffected, errs.ErrNotFound(res.Error)
}

func RemoveSysFile(fileIds []string) (int64, error) {
	db := mysql.Db("salve-0").Model(&model_sys.SysFilePo{})
	res := db.Delete(&model_sys.SysFilePo{}, fileIds)
	return res.RowsAffected, errs.ErrNotFound(res.Error)
}
